package org.hibernate.dao;

import java.io.Serializable;
import java.sql.Connection;
import java.util.List;

/**
 * 
 * @项目名称:cyj_trainer
 * @类名称:IBaseDao
 * @类描述:统一的数据访问层接口对象;
 * @创建人:苗有虎
 * @创建时间:Sep 18, 201010:06:49 AM
 * @修改人:Administrator
 * @修改时间:Sep 18, 201010:06:49 AM
 * @修改备注:
 * @version
 */
@SuppressWarnings("unchecked")
public interface IBaseDaobak {
	/**
	 * 加载指定的ID的持久化的对象;
	 */
	public Object loadById(Class clazz, Serializable id);

	/**
	 * 加载满足条件的持久化对象;
	 */
	public Object loadObject(String hql);

	/**
	 * 删除指定ID的持久化对象;
	 */
	public void delById(Class clazz, Serializable id);

	/**
	 * 保存或更新指定的持久化对象;
	 */
	public void saveOrUpdate(Object obj);

	/**
	 * 更新指定的持久化对象
	 * 
	 * @param obj
	 */
	public void update(Object obj);

	/**
	 * 装载指定类的所有持久化对象;
	 */
	public List listAll(String clazz);

	/**
	 * 分页装载指定类的所有的持久化对象;
	 */
	public List listAll(String clazz, int pageNo, int pageSize);

	/**
	 * 统计指定类的所 有的持久化对象;
	 */
	public int countAll(String clazz);

	/**
	 * 查询指定类的满足条件的持久化对象;
	 */
	public List query(String hql);

	/**
	 * 带有缓存的持久化的查询;
	 * 
	 * @param hql
	 * @param cache
	 * @return
	 */
	public List query(String hql, boolean cache);

	/**
	 * 分页查询指定类的满足条件的持久化对象;
	 */
	public List query(String hql, int pageNo, int pageSize);

	/**
	 * 统计指定类的查询结果;
	 */
	public int countQuery(String hql);

	/**
	 * 条件更新数据;
	 */
	public int update(String hql);

	/**
	 * 从连接池中取得一个JDBC的连接;
	 */

	public Connection getConnection();

	public List getPageBySql(Class cla, String sql, int pageNo, int pageSize);

	/**
	 * 不带缓存的查询;
	 * 
	 * @param entity
	 *            实体类对象;
	 * @param sql
	 *            查询的sql语句;
	 * @return
	 */
	public List getObjectBySQL(Class entity, String sql);

	/**
	 * 带有缓存的查询;
	 * 
	 * @param entity
	 *            实体类对象;
	 * @param sql
	 *            查询的sql语句;
	 * @param cache
	 *            true为缓存,false不缓存
	 * @return
	 */
	public List getObjectBySQL(Class entity, String sql, boolean cache);

	/**
	 * 根据相应的sql语句删除相应的对应;
	 * 
	 * @param sql
	 *            执行的sql语句;
	 * @return
	 */
	public boolean delObjectBySQL(Class entity, String sql);

	/**
	 * 统计sql语句里相应的数量;
	 * 
	 * @param sql
	 * @return
	 */
	public int countSqlQuery(String sql);

}
